package net.wofly.sale.commodity.service;

import java.util.List;
import java.util.Map;

import org.springframework.web.bind.annotation.RequestParam;

import com.github.stuxuhai.jpinyin.PinyinException;

import net.wofly.common.condition.Condition;
import net.wofly.common.persistence.PageWrapper;
import net.wofly.framework.util.ReturnBean;
import net.wofly.sale.commodity.domain.Commodity;
import net.wofly.sale.commodity.domain.CommodityChannel;
import net.wofly.sale.commodity.dto.CommodityDto;

public interface ICommodityService {

	/**
	 * 增加或修改
	 * 
	 * @param entity
	 * @return
	 */
	Commodity save(Commodity entity);

	/**
	 * 删除
	 * 
	 * @param entity
	 * @return
	 */
	void delete(Commodity entity);

	/**
	 * 根据主键ID删除
	 * 
	 * @param key
	 * @return
	 */
	void delete(String key);

	/**
	 * 根据主键查询
	 * 
	 * @param key
	 * @return
	 */
	Commodity findOne(String key);
	
	List<Commodity> save(List<Commodity> entityList) ;

	List<Commodity> findByStatus(Integer status);

	List<Commodity> findByCommodityTypeIDAndStatus(String commodityTypeID, Integer status);

	/**
	 * 添加商品
	 * <ul>
	 * 	<li>添加时需要验证商品编码是否存在，如果存在则提示用户</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodityDto
	 * @throws PinyinException 
	 */
	ReturnBean<Commodity> addCommodity(CommodityDto commodityDto) throws PinyinException;

	/**
	 * 添加商品渠道编码及价格
	 * <ul>
	 * 	<li>验证渠道编码是否重复</li>
	 * </ul>
	 *
	 * @param commodityChannel
	 */
	ReturnBean<CommodityChannel> addCommodityChannel(CommodityChannel commodityChannel);

	/**
	 * 删除商品
	 * <ul>
	 * 	<li>只是将商品 状态置为无效</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodityID
	 */
	ReturnBean<String> delCommodity(String commodityID);

	/**
	 * 删除商品渠道编码及价格
	 * <ul>
	 * 	<li>验证商品渠道编码置为无效</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodityChannelID
	 */
	ReturnBean<String> delCommodityChannel(String commodityChannelID);

	/**
	 * 获取商品的所有渠道价格
	 */
	ReturnBean<PageWrapper<Commodity>> getAllCommodityChannel(Integer pageNum, Integer pageSize, Condition condition);

	/**
	 * 通过商品类型获取商品列表
	 * <ul>
	 * 	<li>flag=1时只取所有分类下有效的商品；flag=0时取所有无效商品；flag=-1时，取所有商品。</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodityTypeID
	 * @param flag
	 */
	ReturnBean<List<Commodity>> getCommodityByType(String commodityTypeID, Integer flag);

	/**
	 * 获取指定商品的所有渠道价格
	 *
	 * @param commodityID
	 */
	ReturnBean<Commodity> getCommodityChannelByID(String commodityID);
	
	/**
	 * 获取指定商品详情
	 * 包括 商品信息 商品品牌 商品渠道 商品终端 商品详情页图片
	 * 
	 * @param commodityID
	 */
	ReturnBean<Commodity> getCommodityByID(String commodityID);

	/**
	 * 修改商品
	 * <ul>
	 * 	<li>修改时验证商品编码是否存在，如果存在则提示用户</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodity
	 */
	ReturnBean<Commodity> updateCommodity(Commodity commodity);
	
	/**
	 * 修改商品
	 * <ul>
	 * 	<li>修改时验证商品编码是否存在，如果存在则提示用户</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodity
	 * @throws PinyinException 
	 */
	ReturnBean<Commodity> updateCommodity(CommodityDto commodityDto) throws PinyinException;

	/**
	 * 修改商品渠道编码及价格
	 * <ul>
	 * 	<li>验证商品渠道编码是否重复</li>
	 * 	<li></li>
	 * </ul>
	 *
	 * @param commodityChannel
	 */
	ReturnBean<CommodityChannel> updateCommodityChannel(CommodityChannel commodityChannel);
	
	/**
	 * 获取所有商品
	 * 
	 * @param status
	 * @return
	 */
	Map<String ,Commodity> getAllByStatus(Integer status);
	
	
	public PageWrapper<Commodity> getCommodityByPage(String commodityName,String commodityTypeID, Integer status,Integer pageNum, Integer pageSize) ;
}
